3.06. NewSQL системы
Разработчику
Аналитику
Тестировщику
Архитектору
Инженеру
NewSQL системы
NewSQL представляет собой класс современных реляционных систем управления базами данных, созданных для решения задач масштабирования онлайн-транзакционной обработки (OLTP) без потери привычных свойств традиционных реляционных СУБД. Эти системы обеспечивают строгие гарантии целостности данных через соблюдение принципов ACID — атомарность, согласованность, изолированность и долговечность — одновременно с возможностью горизонтального масштабирования, характерного для NoSQL-решений. NewSQL сохраняет совместимость с языком SQL, что позволяет разработчикам использовать уже знакомые инструменты и подходы при построении высоконагруженных приложений.
Исторический контекст появления NewSQL
Развитие информационных систем в начале двадцать первого века столкнулось с фундаментальным ограничением: классические реляционные СУБД, такие как Oracle Database, Microsoft SQL Server или PostgreSQL, плохо масштабировались в условиях резко возросших объемов пользовательских запросов и данных. Вертикальное масштабирование — увеличение мощности одного сервера — становилось экономически нецелесообразным и технически ограниченным. В ответ на эти вызовы появились NoSQL-системы, такие как Cassandra, MongoDB и Redis, предлагающие горизонтальное масштабирование за счет отказа от некоторых свойств реляционной модели, включая поддержку сложных транзакций и строгую согласованность.
Однако многие бизнес-приложения, особенно в финансовой, логистической и государственной сферах, не могли пожертвовать гарантиями ACID. Потеря согласованности данных или невозможность выполнить распределённую транзакцию делала NoSQL непригодным для таких задач. Эта дилемма породила потребность в новом поколении СУБД, сочетающем лучшие черты обоих миров: масштабируемость NoSQL и надежность реляционных баз. Именно так возник термин «NewSQL», впервые использованный исследователем Майклом Стоунбрейкером в 2011 году для описания нового класса систем, способных обеспечивать высокую производительность OLTP-нагрузок при сохранении полной семантики SQL и транзакционной целостности.
Основные характеристики NewSQL
NewSQL-системы объединяют несколько ключевых архитектурных и функциональных особенностей, отличающих их от как классических реляционных, так и типичных NoSQL-баз данных.
Во-первых, они поддерживают язык SQL в его стандартной или близкой к стандартной форме. Это означает, что разработчики могут использовать привычные конструкции SELECT, INSERT, UPDATE, DELETE, JOIN, агрегатные функции и подзапросы без необходимости переписывать существующий код или обучаться новым DSL (Domain-Specific Language).
Во-вторых, NewSQL гарантирует выполнение всех свойств ACID даже в условиях распределённой архитектуры. Атомарность обеспечивает, что транзакция либо полностью завершается, либо полностью откатывается. Согласованность гарантирует, что данные всегда остаются в корректном состоянии, соответствующем заданным ограничениям. Изолированность предотвращает конфликты между параллельно выполняющимися транзакциями. Долговечность обеспечивает сохранность результатов успешной транзакции даже в случае сбоя оборудования.
В-третьих, NewSQL-системы построены с учётом горизонтального масштабирования. Они распределяют данные по множеству узлов кластера, автоматически балансируя нагрузку и обеспечивая отказоустойчивость. При добавлении новых узлов система сама перераспределяет данные и запросы, минимизируя необходимость ручного вмешательства.
В-четвёртых, такие системы оптимизированы именно под OLTP-нагрузки — большое количество коротких, частых транзакций с низкой задержкой. Это отличает их от систем аналитической обработки (OLAP), где важна скорость выполнения сложных запросов к большим объёмам данных.
Наконец, большинство NewSQL-решений реализуют механизмы управления параллелизмом на основе оптимистичного или гибридного подхода, что позволяет эффективно обрабатывать множество одновременных запросов без блокировок, характерных для классических СУБД.
Архитектурные подходы в NewSQL
Существует несколько основных архитектурных моделей, используемых в NewSQL-системах.
Первая модель — это распределённая разделяемая память (shared-nothing architecture) с шардированием данных. В этой модели каждый узел кластера управляет своей частью данных (шардом), и нет общего хранилища. Координация между узлами осуществляется через протоколы распределённого согласования, такие как Paxos или Raft. Такой подход обеспечивает высокую масштабируемость и отказоустойчивость, поскольку сбой одного узла не влияет на доступность других шардов.
Вторая модель — новый движок поверх существующего СУБД. Некоторые NewSQL-системы используют проверенные компоненты классических баз данных, но заменяют или дополняют их собственными механизмами масштабирования и транзакций. Например, они могут использовать MySQL-совместимый интерфейс, но внутренне реализовывать распределённое хранение и выполнение запросов.
Третья модель — ин-мемори архитектура. Некоторые NewSQL-системы хранят данные преимущественно в оперативной памяти, что позволяет достичь крайне низких задержек при выполнении транзакций. Для обеспечения долговечности такие системы используют журналы транзакций (write-ahead log) и регулярные снимки состояния (snapshots), записываемые на диск.
Четвёртая модель — глобальные часы и временные метки. Для обеспечения строгой сериализуемости в распределённой среде некоторые системы используют аппаратные или программные источники глобального времени, позволяющие точно упорядочивать события на разных узлах. Это критически важно для приложений, требующих строгой последовательности операций, например, в банковской сфере.
CockroachDB
CockroachDB — одна из наиболее известных и широко используемых NewSQL-систем с открытым исходным кодом. Она построена на принципах распределённой архитектуры без общего хранилища и использует протокол Raft для репликации данных и достижения консенсуса между узлами. Данные автоматически разделяются на диапазоны (ranges), каждый из которых реплицируется на несколько узлов. При добавлении новых узлов CockroachDB автоматически перераспределяет диапазоны для выравнивания нагрузки.
Система гарантирует сериализуемую изоляцию транзакций и строгую согласованность даже в условиях сетевых разделений. CockroachDB совместим с PostgreSQL на уровне протокола, что позволяет использовать существующие драйверы и инструменты. Это значительно упрощает миграцию приложений с PostgreSQL на CockroachDB.
Особое внимание в CockroachDB уделено отказоустойчивости и географическому распределению. Кластер может быть развёрнут в нескольких дата-центрах или даже в разных облачных провайдерах, обеспечивая защиту от локальных сбоев. Система поддерживает политики размещения данных, позволяя контролировать, где именно хранятся определённые фрагменты информации — например, для соблюдения требований законодательства о защите персональных данных.
Google Spanner
Google Spanner — это проприетарная NewSQL-система, разработанная компанией Google и изначально недоступная как самостоятельный продукт. Позже она стала частью облачного предложения Google Cloud под названием Cloud Spanner. Spanner считается одной из первых систем, успешно реализовавших строгую сериализуемость в глобально распределённой среде.
Ключевой особенностью Spanner является использование истинного времени (TrueTime) — гибридного механизма, сочетающего GPS-часы и атомные часы на серверах Google. Этот подход позволяет системе присваивать каждой транзакции временную метку с известной погрешностью, что обеспечивает корректное упорядочивание событий даже при отсутствии идеальной синхронизации часов между узлами.
Spanner автоматически управляет шардированием и репликацией данных, обеспечивая высокую доступность и низкую задержку. Он поддерживает стандартный SQL и предоставляет интерфейсы для различных языков программирования. Cloud Spanner предлагает модель оплаты по использованию, что делает его привлекательным для приложений с переменной нагрузкой.
VoltDB
VoltDB (ранее известный как H-Store) представляет собой NewSQL-систему с ин-мемори архитектурой, ориентированную на обработку транзакций в реальном времени. Все данные хранятся в оперативной памяти, что позволяет достигать микросекундных задержек при выполнении запросов. Для обеспечения долговечности VoltDB использует комбинацию командных журналов (command logging) и периодических снимков состояния.
Особенностью VoltDB является компиляция хранимых процедур на Java в нативный код, который выполняется непосредственно на узлах кластера. Это позволяет минимизировать накладные расходы на интерпретацию запросов и обеспечить максимальную производительность. Система поддерживает стандартный SQL для чтения данных, но модификация данных осуществляется преимущественно через вызовы скомпилированных процедур.
VoltDB часто используется в сценариях, требующих немедленной реакции на события: обработка финансовых транзакций, телекоммуникационные биллинговые системы, игры в реальном времени и IoT-платформы. Его архитектура оптимизирована под предсказуемые, заранее определённые рабочие нагрузки.
NuoDB
NuoDB — это распределённая NewSQL-система, основанная на концепции эластичных транзакций и децентрализованного каталога. В отличие от многих других решений, NuoDB не использует централизованный координатор транзакций. Вместо этого каждый узел (называемый Transaction Engine) может инициировать и выполнять транзакции независимо, взаимодействуя с другими узлами только при необходимости разрешения конфликтов.
Данные в NuoDB хранятся в Storage Managers, которые могут использовать различные бэкенды, включая локальные файловые системы или объектные хранилища. Это обеспечивает гибкость в выборе инфраструктуры. Система поддерживает стандартный SQL и совместима с JDBC/ODBC, что упрощает интеграцию с существующими приложениями.
NuoDB особенно хорошо подходит для облачных сред, где требуется быстрое масштабирование вверх и вниз в зависимости от нагрузки. Добавление или удаление узлов происходит без остановки работы базы данных, что критично для сервисов с переменной интенсивностью использования.
ClustrixDB
ClustrixDB — это коммерческая NewSQL-система, разработанная компанией Clustrix (позже приобретённой MariaDB Corporation). Она позиционируется как масштабируемая замена MySQL, сохраняя полную совместимость с её протоколом и синтаксисом. Это позволяет существующим приложениям, работающим с MySQL, перейти на ClustrixDB без изменений в коде.
Архитектура ClustrixDB основана на распределённой модели без общего хранилища. Данные автоматически шардируются по узлам кластера, а запросы оптимизируются и выполняются параллельно на всех затронутых узлах. Система использует собственный оптимизатор запросов, учитывающий распределённую природу данных.
ClustrixDB обеспечивает строгие гарантии ACID и поддерживает сложные транзакции, включая распределённые JOIN и агрегатные операции. Особое внимание уделено безопасности: система поддерживает шифрование данных как в покое, так и при передаче, а также интеграцию с внешними системами аутентификации.